// 引入 express 框架
const express = require('express');
// 创建路由对象
const router = express.Router();
// 引入 multer 用于处理文件上传
const multer = require('multer');
// 引入 xlsx 用于解析 Excel 文件
const xlsx = require('xlsx');
// 引入数据库操作模块
const { pool } = require('../shamall/db');
const ExcelJS = require('exceljs');
const fs = require('fs');
const path = require('path');
// 引入身份验证中间件
const { authenticateToken } = require('../middleware/authentk');

// 配置 multer, 指定上传目录为 public/uploadsxlsx
const uploadxls = multer({ dest: 'public/uploadsxlsx/' });

// 批量上传用户接口，先身份验证，再处理上传
router.post('/batch-upload', authenticateToken, uploadxls.single('file'), async (req, res) => {
    try {
        // 获取上传的文件路径
        const filePath = req.file.path;
        const workbook = new ExcelJS.Workbook(); // 加载 Excel 文件
        await workbook.xlsx.readFile(filePath); // 读取 Excel 文件
        // 取第一个工作表
        const worksheet = workbook.worksheets[0];

        // 1. 提取所有图片
        const images = [];
        worksheet.getImages().forEach(img => {
            const image = workbook.getImage(img.imageId);
            // 保存图片到服务器
            const imgName = `upload_${Date.now()}_${Math.random().toString(36).slice(2)}.${image.extension}`;
            const imgPath = path.join(__dirname, '../public/uploads', imgName);
            fs.writeFileSync(imgPath, image.buffer);
            const baseUrl = 'http://localhost:4000';
            const url = `${baseUrl}/uploads/${imgName}`;
            console.log('图片信息:', { row: img.range.tl.nativeRow + 1, col: img.range.tl.nativeCol + 1, url });
            images.push({
                row: img.range.tl.nativeRow + 1,
                col: img.range.tl.nativeCol + 1,
                url
            });
        });

        // 2. 解析表格数据
        const data = [];
        worksheet.eachRow((row, rowNumber) => {
            if (rowNumber === 1) return; // 跳过表头
            const imageObj = images.filter(img => img.row === rowNumber);
            data.push({
                images: imageObj.map(img => img.url),
                title: row.getCell(2).value,
                context: row.getCell(3).value,
                price: row.getCell(4).value
            })
        })

        console.log(data);

        // 3. 数据库插入前，先检查 app_login_id 是否存在
        const app_login_id = req.user.id;
        const [rows] = await pool.query('SELECT id FROM app_login WHERE id = ?', [app_login_id]);
        if (rows.length === 0) {
            return res.status(404).json({ code: 400, msg: 'app_login_id 不存在，无法插入数据' });
        }

        // 4. 批量插入
        for (const row of data) {
            console.log('准备插入数据: ', row);
            await pool.query(
                'INSERT INTO app_list (images, title, context, price, app_login_id) VALUES (?, ?, ?, ?, ?)',
                [JSON.stringify(row.images), row.title, row.context, row.price, app_login_id]
            );
        }

        // 返回成功响应
        res.json({
            code: 200,
            msg: '批量导入成功',
            count: data.length
        })
    } catch (err) {
        console.log('数据库插入失败: ', err);
        // 错误处理
        res.status(500).json({ code: 500, msg: '批量导入失败', error: err.message });
    }
});

module.exports = router;